04 - Sistema de disparos e vida do inimigo
Agora que nosso jogador possui HP e pode ativamente perder o jogo, precisamos fazer o mesmo para nossos inimigos: Se eles chegarem a zero de vida, são destruídos e, futuramente, podem entregar XP ou itens ao jogador.
Vamos começar definindo um valor de vida no inimigo0. Em um evento de Criar, adicione o seguinte código:
hp = 10;
Também vamos definir que, ao ficar com 0 ou menos de vida, ele é destruído. Adicione o código a seguir no evento Etapa:
if hp <= 0{
instance_destroy();
}
Com isso feito, vamos agora criar um objeto com o nome arma0. Ele não terá sprites. Após criá-lo já pode colocar na sala do jogo.
Nele, criaremos alguns eventos: Criar, Etapa e Alarme 0.
Código do Criar:
dano = 10;
vel = 5;
delay = 1;
Código do Etapa:
x = player.x;
y = player.y;
if alarm[0] < 0 {
var proj = instance_create_layer(x,y,"Instances",proj0);
proj.speed = vel;
}
Deixaremos o Alarme 0 vazio por enquanto.
Além da arma0, crie um novo objeto de nome proj0. Este será o projétil a ser disparado pela arma. Não precisa adicionar ele na fase já que será criado apenas quando a arma disparar.
Nele, criaremos dois eventos: Criar e Colisão -> inimigo0.
Código do Criar:
// Deixe vazio por enquanto
Código do Colisão -> inimigo0:
other.hp -= 10;
instance_destroy();
Disparo na direção do jogador:
Proj0 - Código do Criar:
direction = player.direction;
Disparo na direção do mouse:
Proj0 - Código do Criar:
direction = point_direction(x,y,mouse_x,mouse_y)
Disparo na direção do inimigo mais próximo.
Proj0 - Código do Criar:
// DEIXE O CRIAR VAZIO
arma0 - Código do Criar (adicione essa linha):
alvos = ds_list_create();
arma0 - Código do etapa (substitua tudo por esse código):
x = player.x
y = player.y
if alarm[0] < 0 {
collision_circle_list(x,y,100,inimigo0,false,false,alvos,true);
if ds_list_size(alvos) != 0 {
var inimigoAlvo = ds_list_find_value(alvos,0);
var proj = instance_create_layer(x,y,"Instances",proj0);
proj.speed = vel;
proj.direction = point_direction(x,y,inimigoAlvo.x,inimigoAlvo.y);
alarm[0] = game_get_speed(gamespeed_fps) * delay;
}
}
arma0 - Código do Alarme 0 (adicione essa linha):
ds_list_clear(alvos)